dnl Process this file with autoconf 2.52+ to produce a configure script.
dnl
dnl Copyright (C) 2001 Philipp Rumpf
dnl Copyright (C) 2004 Henrique de Moraes Holschuh <hmh@debian.org>
dnl
dnl This program is free software; you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
dnl the Free Software Foundation; either version 2 of the License, or
dnl (at your option) any later version.
dnl
dnl This program is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
dnl GNU General Public License for more details.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with this program; if not, write to the Free Software
dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

AC_INIT([picocoin], 0.5, [Jeff Garzik <jgarzik@pobox.com>])
AC_PREREQ(2.60)
LT_INIT
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_SRCDIR([src/main.c])
AM_INIT_AUTOMAKE(foreign subdir-objects)
AC_CONFIG_HEADERS([picocoin-config.h])

dnl Make sure anyone changing configure.ac/Makefile.am has a clue
AM_MAINTAINER_MODE

AC_CANONICAL_HOST

dnl Checks for programs
AC_PROG_CC
AC_PROG_GCC_TRADITIONAL

dnl Checks for header files.
AC_HEADER_STDC
dnl AC_CHECK_HEADERS(sys/ioctl.h unistd.h)

dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_BIGENDIAN
AC_TYPE_SIZE_T

dnl TODO: AC_SYS_LARGEFILE does not produce O_LARGEFILE on 64-bit Fedora Linux?
AC_SYS_LARGEFILE

AH_VERBATIM([_LARGEFILE64_SOURCE],
[/* Enable LFS extensions on systems that have them.  */
#ifndef _LARGEFILE64_SOURCE
# define _LARGEFILE64_SOURCE 1
#endif])

case "${host}" in
	*-*-darwin*)
		AH_VERBATIM([O_LARGEFILE],
		[/* OSX naturally supports 64-bit files */
		#ifndef O_LARGEFILE
		# define O_LARGEFILE 0
		#endif])
		CPPFLAGS="$CPPFLAGS -I/usr/local/include"
		LDFLAGS="$LDFLAGS -L/usr/local/lib"
		;;
esac

dnl -----------------------------
dnl Checks for required libraries
dnl -----------------------------

AC_CHECK_LIB(m, log, MATH_LIBS=-lm,
  [AC_MSG_ERROR([Missing required libm])])
AC_CHECK_LIB(gmp, __gmpz_init, GMP_LIBS=-lgmp,
  [AC_MSG_ERROR([Missing required libgmp])])
AC_CHECK_LIB(event_core, event_base_new, EVENT_LIBS=-levent_core,
  [AC_MSG_ERROR([Missing required libevent])])
AC_CHECK_LIB(jansson, json_loads, JANSSON_LIBS=-ljansson,
  [AC_MSG_ERROR([Missing required libjansson])])
AC_CHECK_LIB(argp, argp_parse, ARGP_LIBS=-largp)

dnl -------------------------------------
dnl Checks for optional library functions
dnl -------------------------------------
AC_CHECK_FUNCS(fdatasync memmem strndup mkstemp)

dnl -----------------
dnl Configure options
dnl -----------------

dnl Coverage
AC_MSG_CHECKING([whether to code coverage])
AC_ARG_ENABLE([coverage],
	[AS_HELP_STRING([--enable-coverage],[generate code coverage instrumentation])],
	[],
	[enable_coverage=no])
AC_MSG_RESULT([$enable_coverage])

AS_IF([test "$enable_coverage" = "yes"], [
	AC_PATH_PROG(GCOV, gcov, no)
	AS_IF([test "$GCOV" = "no"], [
		AC_MSG_ERROR(gcov tool is not available)])
	AC_PATH_PROG(LCOV, lcov, no)
	AS_IF([test "$LCOV" = "no"], [
		AC_MSG_ERROR(lcov tool is not installed)])
	CFLAGS="-O0 -fprofile-arcs -ftest-coverage"
])

dnl Valgrind
AC_MSG_CHECKING([whether to use valgrind])
AC_ARG_ENABLE([valgrind],
	[AS_HELP_STRING([--enable-valgrind],[Use valgrind when running unit tests])],
	[],
	[enable_valgrind=no])
AC_MSG_RESULT([$enable_valgrind])

AS_IF([test "$enable_valgrind" = "yes"], [
	AC_PATH_PROG(VALGRIND, valgrind, no)
	AS_IF([test "$VALGRIND" = "no"], [
		AC_MSG_ERROR(valgrind tool is not installed)])
	AC_DEFINE(USE_VALGRIND, 1, [Define if valgrind should be used])
])
AM_CONDITIONAL(ENABLE_VALGRIND, [test "$enable_valgrind" = "yes"])

dnl secp256k1 tests
AC_MSG_CHECKING([whether to enable tests for secp256k1 lib])
AC_ARG_ENABLE([secp256k1-tests],
	[AS_HELP_STRING([--enable-secp256k1-tests],[Run secp256k1 tests as part fo make check])],
	[],
	[enable_secp256k1_tests=no])
AC_MSG_RESULT([$enable_secp256k1_tests])
AS_IF([test "$enable_secp256k1_tests" = "no"],
	[ac_configure_args="$ac_configure_args --enable-tests=no"])

dnl Electric Fence
AC_MSG_CHECKING([whether to enable electric fence (www.perens.com)])
AC_ARG_ENABLE([efence],
	[AS_HELP_STRING([--enable-efence],[Enable Electric Fence Malloc Debugger])],
	[],
	[enable_efence=no])
AC_MSG_RESULT([$enable_efence])

AS_IF([test "$enable_efence" = "yes"], [
	AC_CHECK_LIB(efence, memalign,,
	  [AC_MSG_ERROR([Missing required libefence])])
])

dnl --------------------------
dnl autoconf output generation
dnl --------------------------

AC_SUBST(MATH_LIBS)
AC_SUBST(GMP_LIBS)
AC_SUBST(EVENT_LIBS)
AC_SUBST(JANSSON_LIBS)
AC_SUBST(ARGP_LIBS)

AC_CONFIG_SUBDIRS([external/secp256k1])
AC_CONFIG_FILES([
	Makefile
	m4/Makefile
	doc/Makefile
	include/Makefile
	include/ccoin/Makefile
	lib/Makefile
	src/Makefile
	test/Makefile
	test/data/Makefile
	external/Makefile
	])
AC_OUTPUT
